package com.kotlin.flong.coroutines1

import kotlinx.coroutines.Dispatchers.Unconfined
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking

/**
 * @Author:liangjl
 * @Date: 2020/7/8-20:29
 * @Eamil:jilongliang@sina.com
 * @Description:
 *
 * 1、Dispatcher.Unconfined 协程分发器会在调用者线程中去启动协程，但仅仅会持续到第一个挂起点，当挂起结束后程序恢复执行时，它会继续
 * 协程代码执行，但这时执行协程的那个线程是由之前所调用的挂起函数来决定的(这个挂起函数是由哪个线程来执行的，那么后面代码就会由这这线程来
 * 执行)Dispatcher.Unconfined协程分发器适用于这样的一些协程，它既不会消耗CPU时间，同时也不会更新任何共享的数据（特定于具体的线程）
 *
 * 2、Dispatcher.Unconfined是一种高级的机制，它对于某些特殊情况是很有帮助作用的，协程执行的分发是不需要的，或者产生意料之外的副作用
 * 这些都因为协程中的操作必须立刻执行
 *
 * 3、我们在日常代码编写中，几乎不会使用Dispatcher.Unconfined这种协程分发器
 *
 */
fun main() = runBlocking<Unit>{

    launch (Unconfined){
        println("Dispatchers.Unconfined ,Thread ${Thread.currentThread().name}")
        delay(3000)
        println("Dispatchers.Unconfined ,Thread ${Thread.currentThread().name}")
    }

    launch {
        println("No params ,Thread ${Thread.currentThread().name}")
        delay(2000)
        println("No params ,Thread ${Thread.currentThread().name}")
    }



}